Techniques for encrypting data using encryption keys are well known and widely used. Techniques include symmetric key encryption whereby the same key is used to encrypt and decrypt data.
Using techniques such as this it is very important to ensure the secrecy of the key between the sender and recipient of the data and to take steps to reduce the likelihood that the secret key can be guessed by a third party.
In order to reduce as far as possible the chance that a secret key can be guessed, it is important that the secret key is generated in as random a fashion as possible—i.e. a sequence of keys generated by a key generator is ideally as unpredictable and uncorrelated as possible. Moreover, to further improve security and reduce the likelihood that an encrypted message can be intercepted and decrypted by an unauthorised third party, it is desirable to regularly update the key. However, many conventional techniques generate only a single encryption key and rely on security measures to keep this key secret.
As is known in the art, using many conventional techniques, the more random a number sequence is, the more computationally intensive it is to create. Moreover, prime numbers which are frequently used when generating encryption keys are notoriously difficult to compute (this is exemplified by efforts to identify Mersenne primes for example the Great Internet Mersenne Prime Search (http://www.rnersenne.org/default.php)).
In some applications, for example mobile devices where processing power and battery life is limited, this can pose a problem.
Accordingly, it is desirable to provide an encryption key generation technique that is both optimally random whilst limiting the computational intensity required to generate the encryption keys.